The solution that worked for me was to move the original method definition to a module.
expects_method = Speaker.instance_method(:say_hello)
define_method :say_hello do |*args|
Speaker.new.say_hello # => -:18: undefined method `say_hello' for #<Speaker:0x285b4> (NoMethodError)
Speaker.new.extend(EnglishSpeaker).say_hello # => "hello"
You may never need this technique, I only needed it once in the past 2.5 years. But, when it applied I found it to be significantly better than the alternatives.