The javadocs make it clear that this method is called by the servlet container, not ever by servlet code. So I'd say that what happens in that case is up to the container, and definitely undefined.
The destroy method is a placeholder for your code. The container will call it when the servlet's taken out of service. Whatever you put in there will be executed.
If you call it yourself, the same thing will happen.