A specific example of what could have happened.
The passenger bought an advanced ticket with a reserved seat
Between the booking date and the travel date, the service was cancelled. The third party did not notify the customer about the cancellation.
Avanti cleared all existing booking for the cancelled service.
Then, they reinstated the service, assuming all seats were free to book at that moment. They sold the seat again.
If the passenger books the ticket via Avanti or Scotrail, they may get a notification stating when the service is cancelled, but still it is Avanti's problem for screwing up the schedule and booking.
This is not entirely correct. If the reservations on a train are wiped by the carrier (e.g. Avanti), then no other retailer (whether independent or another TOC) is going to know*. There is a piece of work ('retailer alerts') in the pipeline to resolve this, but it is some time away from being live. Note that I am talking about reservations being changed, but the schedule being unchanged (so the train still exists with the same IDs).
If the train really is cancelled - i.e. it no longer exists with the same IDs - or its times are changed, then the retailer is able to identify this through the Timetable Comparator Service, and can use this information to inform the customer. This service is in use by (I think) all independent retailers, and most TOCs.
*unless they actively query the reservation system with each reservation reference to check if it still exists (which might need to be done multiple times if the reservation was made some time before travel). This would be a poor use of resources, though.