Formatting lists in tabular format
You code looks pretty good to me. Some notes:


do |node| and then node[0], node[1]: You should unpack in the block: dp |val1, val2|
Instead of mixing logic with I/O, first build the table string, then print it.


I'd write:

data = {
  numbers:   1..10,
  letters:   %w(a b c d e f g h i j),
  notes:     %w(do re mi fa so la ti do),
  phonetic:  %w(alpha bravo charlie delta echo),
  rainbow:   %w(red orange yellow green blue indigo violet)
}

header = data.keys.map { |k| k.to_s.capitalize }
table = data.values.first.zip(*data.values.drop(1)).map do |row|
  row.zip(header).map do |value, header_name|
    value.to_s.rjust(header_name.size)
  end.join(" ")
end

puts(([header.join(" ")] + table).join("\n"))