Мне кажется, что дизайн немного неуклюжий. Вместо передачи делегата обратно по цепочке, почему бы просто не назначить делегат обоих ViewControllerB и ViewControllerC viewControllerA (так как они одного класса) Вам не нужно пропускать цепочку, если С не нужно общаться с Б.
Перед представлением ViewControllerB:
b.delegate = self
[self presentModalViewController:b animated:YES];
в ViewControllerB до нажатия ViewControllerC
c.delegate = self.delgate
[self.navigationController pushViewController:c animated:YES]
таким образом, и B-> A, а также C-> A