Despite what other, well-intentioned, suggestions imply, there are indeed good reasons why one may want the object referenced by a shared pointer to outlive the pointer itself. For example, if you keep one shared pointer reference and distribute weak pointers, but you also want to delete the shared pointer on a background thread. For algorithmic reasons, you want the liftetime of the shared pointer, and thus the weak pointers, to end when the object is passed to the deleter thread, but you don't want the object to be deleted until the deleter thread can process it.
Luckily, there is a way to do this without drawing outside the lines (afaict). Instead of using a "hack" custom deleter that doesn't delete the object, use a custom deleter that puts the object pointer into a unique pointer. Just prime the deleter with the unique pointer beforehand, or use some more sophisticated object management method.
I think that should do the job without triggering anyone's sensibilities. You'd be using the deleter in the way it was intended to be used (aka custom memory management), and it doesn't interfere with how shared_ptr is supposed to work.