Well, if you're using the stack to store operands for post-fix notation, and you come to an operator, you'd remove the operands from the stack and, uhhh... operate on 'em. At this point I guess you could say the stack was "cleared", although there are almost certainly other values on the stack...
For purposes of keeping our program from crashing, the stack should be "cleared, up to the return address" when we get to "ret". The return address doesn't have to be the "only" thing on the stack, it just has to be the "next" thing on the stack.
That's if there IS a return address on the stack. If your entrypoint is "main", there's a return address and you can "ret" from it. But "_start" is jumped to, not called. The very first thing on the stack is the argument count ("first" meaning [esp], as esp is when we first get it). Then, working up the stack four bytes at a time, there's a pointer to the program name - a zero-terminated string. Pointers to command line parameters are next, if any, followed by a (dword) 0. Then there are pointers to environment variables (zero-terminated strings), again followed by a 0. There's some more stuff up there that may be of interest, but I haven''t delved into it. Furthermore, these "pointers to zero-terminated strings", as far as I can determine, point to stack memory. Apparently, the loader has used the stack to pass us our copy of the environment variables... and who knows what else. So if "cleared" means "no more values on it"... never, for practical purposes.
I still don't feel like I'm answering the right question here. Don't give up until you understand what you need to!
Best,
Frank