I have to admit I find the dissection of chores discussed here to be highly interesting. I understand that people don't want to feel put upon or taken advantage of, but something in me is tempted to say "oh for deity's sake it's 3 flippin towels!"

This is really an excellent example of what happens when we apply our own assumptions, experiences and expectations to others instead of actually communicating.

It is also a great reminder of why it is prudent to have a chore-assignment list.

In this case I think OP literally brought the situation on themselves. They voluntarily went above and beyond and basically told others that, in the interest of efficiency and some amount of goodwill, they would do their laundry for them. Unless a specific distribution of labor has been discussed beforehand (i.e. if Person A washes/loads it is agreed that person B always dries/unloads/folds/hangs etc.), the logical assumption is that the pooled laundry would stay together until collected by it's owners. OP washed, OP hung up...and I believe the natural progression would be OP taking all the towels back in. I am actually surprised that some PP said OP wasn't under any obligation to bring John's towels in - why does OP's generosity end at hanging them up? OP does not indicate there was any discussion about what happens to the clothes after the wash, i.e. "You can throw your towels in with mine but then you get to hang them up/take them in."
I was under the impression that reciprocation should never be assumed if not specifically discussed or requested. I also believe that it is unbecoming to do or give something with the expectation of getting something in return - this turns random acts of kindness into premeditated acts of self-involvement. If you are going to start "keep score" because you find yourself noticing when people don't perform to your expectations, then you may consider either voicing these expectations or lowering them.

John collected his own towels instead of waiting for OP to do so. Maybe he needed them sooner. Maybe he was, essentially, retaking his responsibility for his own property. From a slightly different perspective, you might say he saved OP the trouble of taking his towels in, so IMHO his collecting his own towels was not rude and might even be considered helpful.
Now as to his ignoring everyone else's towels: yes he could have gone above and beyond as OP did, but he was under no obligation to do so. I think it is rather petty to judge him by one's own standards that he might not even be aware of. To me, it does not seem in the spirit of true generosity to point out your own actions, and then essentially complain that "
I was (overly) generous but look how so-and-so wasn't as generous as I was." The Little Red Hen
asked for help, so I don't think you can claim the same level of indignation at John's perceived laziness.

Another thing to consider (I believe PPs maye have pointed this out): Has anyone else done something they thought was helpful, like putting away someone else's things, only to be berated by the other person for "messing" with their stuff? What if John had taken everything in, only to be told something like "That's not how I fold my towels" or "I wanted to leave them on the line longer, they're too damp"?
OP you gave 110% percent, of your own free will. Barring some chore agreement you failed to mention, John was only obligated to contribute 100%, which in this case would be taking care of his own towels. Sure it would have been "nice" if he had followed your example, but he didn't have to. If it was his mutually agreed-upon "job" to take everyone's laundry off the line whenever washing is done, then you would be justified in being put out. As it is, I don't see that he did anything wrong.