I think people take design guidelines too literally. The 3-tier design is just a general framework, it is not a hard requirement by any means. Books teach designs that fit very very large networks and still work great. In reality, majority of engineers don't face such network design tasks on a daily basis and small to medium size enterprises don't really need dedicated distribution layer and can perfectly work on just Access and Core or even single-layer completely collapsed Core layer. The segregation into tiers makes sense when there is a practical need to make sure a certain function is isolated in a layer. For example, when the access port density is extremely high or it is too widely distributed. Like if you have several thousand dispersed locations that require very few ports at each, but still each location requires a backhaul link to the core. Core ports might be too expensive to burn them for each location directly. Instead it makes sense to aggregate them in distribution layer and then presenting to the core in a more condensed way. Years ago, I have seen such implemntation, where small ISP would install a switch in a residential block of flats type house and offered direct Ethernet connectivity. They had many many small switches scattered around lots of houses and obviously each would need a pair of ports as uplinks to the core. Now, the core would need a high throughput, so they used something like Cat6500 in the core. However, per port cost on that platform was very high, so instead of filling up the chassis with more modules, they aggregated these access switches on a cheaper 3550s and then uplink 3550s into the core 6500s. That design did call for cheaper distribution layer to conserve ports on the core. So, as I say it is a case by case decision, but unfortunately people (especially engineers with less experience), try to follow the book designs to the letter and replicate solutions just for the sake of doing that without real thought of necessity.
Sergey explained it well. Validated designs are just frameworks. Sometimes physical constrains require to implement a Distribution layer. For example, I have a customer with one of the largest industrial sites in the world, it's equivalent in size of hundreds of football fields, without a Dist layer, they'd have to span hundreds of links from Access to Core over several km.