IMO, a fair price model should reflect the cost model. Unlike electricity or water where there are obvious per-unit cost, bandwidth and telecom infrastructure is quite different. You need the equipment to handle peak usage, which is the real cost. Everything outside peak doesn't cost much at all as those equipment is always powered on and additional power cost of moving more packets is negligible.Usage-based price models are the standard, not the exception. It only worked on the Internet when speeds were so slow, and most people used at least roughly the same bandwidth. When power users are consuming 200 times the bandwidth as average users, and 1,000 the bandwidth of some infrequent users, charging everyone the same flat rate is utter insanity.
Thus charging only for bandwidth makes perfect sense assuming the bigger pipes consume more bandwidth at peak, so they shoulder a bigger share. Alternative charing models could be charging for peak usage only, or time-of-use charges in terms of data usage while the off-peak cost should be mostly free.
All current data cap implementation conveniently ignores the fact that bandwidth cost is very different during peak and off-peak. Those people stay within data cap can easily cost the company more if their usage is mainly during peak hours, forcing infrastructure upgrades, while the power users consume bulk off-peak. If they really want to justify data cap on cost, they should have different pricing during peak and off-peak. Otherwise, it's really just a cash grab.