I agree that this is a strange question, but for the sake of curiosity, I tried it in a few different models just to see what happens. This is what I found (Mind you, I am making an educated guess as to the reasons this is happening, I could be wrong).
If you call destroy() from an init() or service method, the code that is in the destroy() will run just like any other method. But I don't think it actually destroys the
servlet (or takes the servlet out of service). The API states
This method gives the servlet an opportunity to clean up any resources that are being held (for example, memory, file handles, threads) and make sure that any persistent state is synchronized with the servlet's current state in memory.
The destroy() method is called by the container when all of the servlet's threads have exited or it hit a time out. It is giving you a chance to clean up resources, not actually destroying the servlet. Since the method itself has nothing to do with the lifecycle of the servlet, you can call it from any other servlet method without exception.
Again, I may be mistaken, and please let me know if I am!