The dynamic type support in .Net 4 does not really give you full monkey-patching support across the CLR type system. It give you another way to mock objects, but to be frank the current way is plenty good (see moq: http://code.google.com/p/moq/)
With dynamic types, you lose intellisense, so an argument could be made that it is not advisable to dynamic for mocking.
The IronPython style interception will allow you to wrap up an existing object with your own desired behavior, but it will not allow you to tell the framework, to patch all Foo objects (from this point onwards) so Bar method will call Bar2 instead of Bar.
Keep in mind, with IronRuby and IronPython there are 2 separate type systems in play, there is the underlying CLR type system and the IronRuby/IronPython type system, when they call out to C# code there is marshalling going on. So even though IronRuby/IronPython can properly monkey patch their own type system, they can not use the same mechanism to patch the CLRs type system.
If you want monkey patching you need proper interception and that is hard: http://stackoverflow.com/questions/1331851/dynamic-interception-of-calls-in-net/1331869#1331869