>>NULL is NOT guaranteed to be zero.
That's true, but to be more accurate, NULL is not guaranteed to be represented by all bits zero.

>>NULL is allowed to be platform-specific.
Also true.

>>Bottom line, if you're returning a null pointer, use NULL and not 0.
This is not true. The C++ standard says that an integral constant that evaluates to zero and used in a pointer context is a null pointer.
A null pointer constant is an integral constant expression (5.19) rvalue of integer type that evaluates to
zero. A null pointer constant can be converted to a pointer type; the result is the null pointer value of that
type and is distinguishable from every other value of pointer to object or pointer to function type.
In that case, 0 and NULL are the same. Stroustrup 5.1.1 pp.88 says that 0 causes fewer problems, so I tend to use 0.