class WeakBoundMethod:

I suggest making it a new-style class by inheriting from object.

        assert (hasattr(meth, '__func__') and hasattr(meth, '__self__')),\
               'Object is not a bound method.'
Don't do this. Just let the invalid parameter types raise attribute errors when you try to fetch the `__func__` and `__self__`. You don't gain anything by checking them beforehand.

    assert self.alive(), 'Bound method called on deleted object.'

Raising an Assertion here is a bad choice. Assertions are for thing that should never happen, but having the underlying self object cleaned up doesn't really count. Raise an exception like weakref.ReferenceError. That way a caller can reasonably catch the error.

The documentation is very clear, well done.

**EDIT**

        try:
            return self._func(self._self(), *args, **kw)
        except Exception as e:
            raise e

Why are you catching an exception only to rethrow it? That's really pointless.

I'd write the whole function as:

    def __call__(self, *args, **kw):
        _self = self._self()
        if _self is None:
            raise weakref.ReferenceError()

        return self._func(_self, *args, **kw)