This is a bit over-abstracted.   In general, any time you find yourself doing meta-programming, ask yourself if what you're doing makes things cleaner and easier to read, or is just clever for clever's sake.

For instance, you could have two methods - one for contacts, and one for accounts, and pull out all the reused bits to functions.  You'd still have everything DRY, but the code would be much more readable.