Como remover programaticamente “informações singleton” em uma instância para torná-lo empacotador?

Eu criei um objeto que falhou ao empacotar devido a uma "definição de metaclasse singleton executada em tempo de execução" (esta descrição do que o código corrige?).

Isso é realizado pelo seguinte código:

# define class X that my use singleton class metaprogramming features
# through call of method :break_marshalling!
class X
   def break_marshalling!
     meta_class = class << self
       self 
     end
     meta_class.send(:define_method, :method_y) do 
      return 
    end
  end
end

# prepare my instance of X now
instance_of_x = X.new

# marshalling fine here
Marshal.dump instance_of_x

# break marshalling with metprogramming features
instance_of_x.break_marshalling!

Marshal.dump instance_of_x
# fails with TypeError: singleton can't be dumped 

O que posso fazer para corrigir o empacotamento de objetos? É possível "remover" os componentes singleton doclass X do objetoinstance_of_x?

Eu realmente preciso de um conselho sobre isso, porque alguns de nossos objetos precisam ser armazenados em cache através do mecanismo de serialização Marshal.dump. Esse código é executado no ruby-1.9.3, mas espero que se comporte de maneira semelhante no ruby-2.0 ou ruby-2.1

questionAnswers(4)

yourAnswerToTheQuestion