The big problem with monkey patching is that no two modules can safely monkey-patch the same third module. Recently there was a rather drastic example in the Ruby community when two large libraries or frameworks added incompatible json methods to Class (or was it Object? dunno...), and that meant you couldn't use these two libraries in the same process.
Your approach doesn't solve this problem. And it can't, because it's not reasonably solvable.
I might add that source filters suffer from the same problem as monkey patching: you can't combine two source filters fiddling with the same piece of syntax.