We had a detour to Progresso and were very disappointed. It is like a border town (Tihuana), but with a beach. The kids enjoyed playing in the sand, but the mexican merchants tried to sell you something every 2 minutes. The beach waiter was excellent and if you like authentic mexican food you will enjoy that. The pop was only $1.00 and beer was $2.00 (cheaper than on the Carnival Cruise). The souvenirs were little mexican nic nacs and the kids picked up $5 - $10 worth. But the town itself is a dump and Carnival Cruises should have no right substituting this on a Caribbean Cruise destination as this is definitely not the emerald green waters you are promised. We were extremely disappointed. If you get re-routed to Progresso, I recommend you cancel the entire Cruise and get your money back from Carnival Cruise lines.
There is a free shuttle into Progresso, so don't bother with a taxi.
People we talked to also said Merida was a disappointment.
As for Cozumel. The water is beautiful and the beach was too. However, again, Carnival Cruise is out to get your money. You can book the Underwater submarine yourself for a lot cheaper than they book you (especially if you have children). The people on the Deluxe beach break had to leave the beach at 1:00 for their bus ride back to the ship. We took the basic beach break and split a taxi ride ($14.00 split by 2 = $7) to the beach break and got to stay until 4 pm. Free drinks. The deluxe beach break included lunch, but we ate on the ship before heading to the beach.
My husband and son did a Carnival unlimited snorkel, but the fish where they took you were not very plentiful. They found better fish right off the pier where the ship was docked and it was FREE. I've heard the Chakanaab Park snorkel is good.
Decided we are definitely not Cruise people. Would rather fly to Cozumel or Hawaii and spend the time on the beach instead of on the ship. Much cheaper too!