Sebastian Padsaid:
> So, is there any way to "force" the methods to be overwritten, even if
> it appears to be superfluous? Or am I using an unsuitable approach to
> begin with?

You might want to consider the Strategy Pattern ... create an object that
implements your plugin method and then delegate to that object whenever
the plugin is called.  By using a separate object, it becomes much easier
to switch strategies at runtime.

class StrategyA
  def pluginMethod
    puts "A"
  end
end

class StrategyB
  ... similar to above
end

class M
  def customize(param)
    if param == "useA" then
      @strategy = StrategyA.new
    elsif param == "useB" then
      @strategy = StrategyB.new
    else
      raise someException
    end
  end

  def runAlgorithm
     pluginMethod
  end

  def pluginMethod
    @strategy.pluginMethod
  end
end

The strategy object is a bit less intimate with your original object than
the extend module approach ... this could good or bad, depending on what
you need.

-- 
-- Jim Weirich     jim / weirichhouse.org    http://onestepback.org
-----------------------------------------------------------------
"Beware of bugs in the above code; I have only proved it correct,
not tried it." -- Donald Knuth (in a memo to Peter van Emde Boas)