Within a co-evolutionary framework of reputations, strategies and social norms, we study the role of punishment in the promotion of cooperation. Norms differ according to whether they allow or do not allow the punishment action to be a part of the strategies, and, in the case of the former, they further differ in terms of whether they encourage or do not encourage the punishment action. In such a framework, depending on the applied social norm, players are first given different reputations based on their employed strategies. Players then update their strategies accordingly after they observe the payoff differences among different strategies. Finally, over a longer horizon, the evolution of the social norms may be driven by the average payoffs of all members of the society. The strategy dynamics are articulated under different social norms. It is found that costly punishment does contribute to the evolution toward cooperation. Not only does the attraction basin of the cooperative evolutionary stable state become larger, but the speed of convergence to the CESS also becomes faster. These two properties are further enhanced if the punishment action is encouraged by the social norm.