<p>I know that it is possible (in theory) to create a new type at run-time, but is it possible to modify a method body of an existing type at run-time? My plan (if I can get this to work) is to tag up methods with a custom attribute, and then at run-time search for methods with the attribute, and insert some of my own code into the method body.</p>

<p>Any suggestions?</p>

<p>I suppose if I can't get that approach to work, I could always go with a virtual method in a base class (with the attributes), combined with a static factory to spit out a derived dynamic type with my run-time generated method in the child class. This would not be quite as clean to use though.</p>

Are you planning to do this for arbitrary types?  I would suppose not given that you are going to decorate the methods with an attribute.
Given that, I would think the better approach would be to define abstract methods in a super class for your types.  A method on the super class can house the boiler-plate method code, and delegate to the concrete implementations via the abstract methods for the individual type's behavior of that method.
Generally speaking though, unless you get into create code files and compiling dynamic assemblies at runtime, what you are looking to do can't be done.  There are likely far more practical OO principles and patterns you can use to achieve close to the same result.