It all depends on how the company defines the responsibility of each role. It would be unfair to sack a person, if oneís role even does not allow/give the opportunity to question.
Theoretically, if some one with a higher rank approved your coding or design, you now holds much less responsibility on your own, instead the approvers are the main focus. If approval is just a signature with no responsibility and risk, it is too easy to be a manager, and the organization will not roll.
I agree with you that the designer should be sacked/demoted, as he is not capable. In this case, programmers are innocent, first they were not given opportunity to question, and secondly I donít think the company expected them to have enough knowledge to question. (I am not saying that they really didnít have the knowledge, what I am saying is that one should not be blamed for not delivering, if they were not responsible for delivering.)