I was in a match on Blistering Sands versus a Terran that was going MMM. I naturally built Colossi, and to counter he got Vikings. Granted, in that match I was really bad on letting my opponent have intel (he owned both watch towers from about 6 minutes in), but I'm not sure what to do. Do you simply attack before he gets many Vikings? Or is there a Protoss unit that can down them effectively? I had at least as many Stalkers as he had Vikings but they couldn't protect my Colossi enough so that they would survive. (Maybe that's just my bad micro though :P)
As Protoss you have the ability to tech switch (due to warp gates) significantly faster than a Terran player. While Protoss has the ability to defend Collosus from Terran with stalkers or (not recommended:) phoenix there are smarter choices.
Instead of attempting to counter them, you could instead exploit what his army -doesn't- have. (If you have an hour to spend, watch this day9 video where Gretorp discusses the value of exploiting what an army is lacking, not what counters it) Your Collosus tech was built to counter his MMM. Is it the only solution to MMM?
Once the Terran player has exposed his viking tech you can switch to high templar easily through warp gates, a direct counter to the MMM ball. (I'm assuming this is fairly late game) By doing this, your Terran enemy has wasted resources on Vikings which have very little utility against a Protoss ground army.
Abuse the fact that you can switch tech's faster then the Terran and make him counter you. High level Zerg's are amazing at this! You have the ability to set the momentum of the fights where Terran is looking to seize the moment when his ball can finally overwhelm you.
If this seems like a lot of work, out number his vikings 2 to 1 with stalkers + blink, but expect him to be able to snipe a few colossus due to his amazing 9 range.
Hope this helps!