I've been trying to solve this exact problem of forbidding rich paste :-)
In WebKit, I use contentEditable=plaintext-only
In Firefox, I detect the paste, and then select a display:-moz-deck zero-width zero-height overflow-hidden div that's a child of the contentEditable, then I cancel the native paste, and then let the paste happen there. From there, the contents get extracted and plain text appears.
In IE, I use: onpaste="document.selection.createRange().text=clipboardData.getData('Text')"
In Firefox, though, you still have a self-XSS attack, where a user can be tricked into pasting something malicious. However, in Firefox, the scope of these XSS attacks is that images get loaded, leaking referers. IE also loads iframes if you let the native paste event happens -- using a DOM0 handler for onpaste seems to avoid this, while not popping a security warning. WebKit's plaintext-only is a saviour.