Ah, this is interesting. In the AOP work I've been doing, something
along these lines is a absolute must inorder to prevent method name
clashes and thus have fully reusable Aspects. My solution was to have
another scoping mechinism akin to public, private, protected, called
"local". It differs in that methods defined in the local scope are
always called locally in the context of that module, but not in the
context of any other. For instance:

  class C
    def x ; 1 ; end
  end

  class D
    def y ; x ; end
    local
    def x ; 2 ; end
  end

  d = D.new
  d.y  #=> 2
  d.x  #=> 1

T.