I think this is the problem with the appropriateness issue, what if it was an image of a police officer, or a soldier, and they had a gun, someone who protects and defends students, citizens, a generally accepted positive image. As long as we agree with what is appropriate, we have no issues with it. We have read about students being told to not wear clothes that show the American flag on them, I can't imagine any flag that would be acceptable to some. I think just being offensive to some is not reason enough to say something is inappropriate, whether it is religious dress, a flag, or even a display of a gun.
In this case, even though there is a first amendment, and the supreme court has said that expressions like that are protected free speech, they also said the school has the right to edit materials to reflect school values.
I think the principal is making the right call. It either falls to she is picking on your son, or she is enforcing a standard the school holds. I would go with her upholding the standard, until I saw differently, if I had an issue with it, I would ask her what her reasons are for the ban. I would imagine it may be as simple as it heads off any disruptions, which is part of her job. It could be she just does not like guns, but if she upholds that standard for the entire school, then I would go with it. I may not agree with it, but I would try to understand and support it, as long as it seemed fair and consistent among all students.