> I'm trying to code in Ruby something that looks like this, 
> when reduced and highly simplified:
[snip]
> As the code suggest, what I except is:
> 
> B class init
> B instance init
> 123
> 456
> B instance init
> 789

Depending on how much you've simplified it, you might see if the
following code helps. (I wonder if you really need to dynamically define
a new method; you certainly don't to achieve the desired output of your
sample.)

class B
  puts "B class init"
  def self.dynamic_method_outputs
    @dynamic_method_outputs ||= []
  end
  
  def initialize
    puts "B instance init"
  end
  
  def self.add_to_dynamic_method_output( val )
    dynamic_method_outputs << val
  end
  
  def dynamic_method
    self.class.dynamic_method_outputs.each do |v|
      puts v
    end
  end
end
    
class D1 < B
  add_to_dynamic_method_output 123
  add_to_dynamic_method_output 456
end

class D2 < B
  add_to_dynamic_method_output 789
end

d1 = D1.new
d1.dynamic_method

d2 = D2.new
d2.dynamic_method

#=> B class init
#=> B instance init
#=> 123
#=> 456
#=> B instance init
#=> 789