Question: In your opinion is it common and ethical to do custom software development for a Customer and then add that software to your base product which is available to your other customers?

My take on it is that:

1. It's a contractual issue between you
and the Customer.
2. It's done often (although maybe not 'common').
3. It's similar to the Customer paying to have their pet feature bumped up the development priority queue.

Can anyone point to any well known (or at least public) examples of this?

Answer: 
1. You are right, it should be a contractual obligation over who owns the source code. Many vendors will sell the finished product to the client but keep the source code, others will give the whole thing away (which is S.O.P. with our company)
2. I imagine it gets done, just not sure as far as the scope or depth of the copying.

I can't think of any well-known examples (primarily because business between two companies isn't often publicized), but a personal example is when we developed a much more flexible time-tracking system in one of our client applications and it turned out so well that we implemented it into our own personal time-tracking system (which wasn't that great out the gate).
From an ethical standpoint, I think it's actually quite simple: It's a matter of what your customer perceives you to be doing. Do they think you are customizing your product for them, or do they think they are paying for their pet requests to be bumped up in your feature queue?