> There must also be a way to copy the doc-string from the unbound method.

I believe functools.wraps will copy the doc-string from the class method.