Monkey testing has it's perks, particularly if a test is being recorded so that when an exception is generated there's an understanding of what caused the exception.
Ad hoc testing is useful for testing a resolution to a specific bug (retesting).
Scripted testing is great for regression situations where you need to exercise all of, or the bulk of, functionality of the software in a new version.
Exploratory testing (my personal favorite) is useful during development, particularly when coupled with Agile development. This allows QA Analysts and Testers to run through the software at their own leisure, often in between other types of testing that may be dictated by the development cycle, to run manual checks and balances against various functions and modules of a given piece of software.
In my current position, I tend to perform exploratory testing that is related to other ad hoc or scripted testing that I currently am doing as mandated by my tasks for the current sprint.