The Cisco doc has it correct.
1. In your example of A->B->C, I'm assuming that A also has a physical link to C (the classic triangle looking configuration) and that this A-C link went down, causing the A-B link to go from blocking to forwarding on B's side and so causing B to mark the topology change bit on hellos sent to C.
2. B will start using the information from A immediately. The port was previously blocking and doesn't have any MAC addresses learned.
3. Prior to the A-C link going down, C was learning A's macs from A, not B. Remember that the A-B port was blocking on B's end, so none of these macs would have been propagated. What C will do is exactly what you stated, "clears mac addresses on all ports EXCEPT the one that received the TCN". C will clear the macs that it learned previously on its A-C link just like we want it to (well, now it doesn't matter because that link is down, but the theory is still good)
4. If D learned the A macs via the C-D link, then that's correct, it will keep them in the table, and that's what we want. Whether the macs go A>C>D or A>B>C>D, the D switch is still receiving the A macs from switch C.
I hope this clears things up!