I find terran ghost's EMP highly efficient against protoss. With a couple of ghosts you can get down shields of a fairly big protoss army essentially taking away half of their hit points. Immortals are especially vulnerable to this. So the question is what do you do as protoss to counter ghosts?
With Phoenixs (anti-grav), with focus fire, with Stalker blink, with harassment, etc. It's more a question of that the Ghost is required so the Terran can face a good Protoss. You can also out-micro the ghost by backing off when you get EMP'ed to let your shields regenerate. Protoss units regen shields very quickly when not in combat. Your last option IMO would be to use Dark Templars to sneak in and kill the ghosts. But there really is no direct counter.
Though this may be very tricky - first it's not that easy to spot out ghosts in the heat of a battle and second ghosts may be cloaked. This looks as a bit more viable option, of course if you have enough space for maneuver.
I find the easiest way is to go templar tech and storm the hell out of him. Get 1-2 obs, find the ghost and feedback works wonders. STORM STORM STORMMMMMMMMMMMMM