なひです。

marshal_dump/marshal_loadが定義されていると、ivar同様、
extendもdumpされませんが、これは仕様でいいでしょうか。

((class << self; self; end).ancestors -
  self.class.ancestors).collect { |m| m.name }.join(" ")
をBar#marshal_dumpで返しておいて、Bar#marshal_loadで元に戻す
という方法もありますが、例えばBaz#marshal_loadとか呼びたい場合には
間に合わないですよねぇ。。。
(Bar#marshal_loadよりBaz#marshal_loadを先に呼びたい)

class Foo
  def marshal_load(obj); end
  def marshal_dump; end
end

class Bar < Foo
  def marshal_load(obj); end
  def marshal_dump; end
end

module Baz; end

o1 = Bar.new
o1.extend(Baz)
o2 = Marshal.load(Marshal.dump(o1))
p (class << o1; self; end).ancestors # => [Baz, Bar, Foo, Object, Kernel]
p (class << o2; self; end).ancestors # => [Bar, Foo, Object, Kernel]