This isn't quite what you asked for but it achieves the same effect:

class Foo
 def red(&p)
   self.class.send(:define_method, :z, &p)
 end

 def blue(y)
  puts y
  z(y)
 end

 def green
   puts "Yeah!"
 end
end

x = Foo.new

x.red do |y|
 green
 puts y
end

x.blue 5
__END__
5
Yeah!
5

Regards,

Sean