В зависимости от того, что вы хотите сделать, более простой альтернативой написанию метода глубокого клонирования может быть написание метода, создающего новый массив по умолчанию при каждом его вызове:
def default
{"a"=>[], "b"=>[], "c"=>[]}
end
ary = default #=> {"a"=>[], "b"=>[], "c"=>[]}
ary["a"] << "foo" #=> {"a"=>["foo"], "b"=>[], "c"=>[]}
default #=> {"a"=>[], "b"=>[], "c"=>[]}
Конечно, еслисодержимое вашего хэша по умолчанию изменяется в течение программы, это не сработает, и вам придется изучить методы клонирования или сортировки, но если содержимое исправлено, это может быть более простым решением.