The tradeoff is that techniques like multimethods significantly weaken the contract that people normally expect from methods/classes.
For example, if I'm writing a normal Java class, I know where I go to find methods dealing specifically with instances Foo (namely Foo and its children and direct users); with multimethods, it's more likely that there is some multimethod out there in an unrelated class that looks for instances of Foo.