Job hopping is almost always involuntary-- not in the sense of a person getting fired, but in the sense of a person being wise enough to realize that he's in a position that his wasting his time, and moving on-- the rational response.
The "job hopper" stigma originally came into existence because people who did so would rise rapidly in salary through iterated negotiations; in times such as the late 1990s, it's possible to get to a very high salary level this way. Pursued inflexibly, it's a terrible strategy in the long term, because it makes you less likely to end up as someone's protege (rolling stone, no moss) and eventually compensation will reflect the resulting stagnation. But most "job hoppers" do not fall into this category; they change jobs not because they are trying to game the system, but because they realize they are wasting time.
If your career is not improving-- you're not learning, inadequately mentored, and no one is looking out for your advancement-- then you should change jobs as soon as you can do so with minimal harm to the company. (If you're in a small company, it might be right to stay on for a couple months, at least to train someone else.) Since most people are not and cannot be "protege", this means that it's good to shift around a few times until finding a fit.
Likewise, everyone has to do some grunt work and deal with some unpleasantness, and recognizing this is just being a mature person, but anyone who finds out his job is mostly or entirely grunt work, or work unrelated to his career (e.g. the programmer who gets put full-time on office tasks) is wasting time and should leave.
Sorry, but I have to say all this because I am sick and fucking tired of people ripping on my generation for not playing by someone else's shitty rules. Are the older people really so damn entitled as to not understand all this? And how can they expect loyalty to companies when layoffs happen all the time?