How easily this could be fixed by setting not a salary cap, but a salary minimum.
the owners actually had a salary floor proposal for the last cba but the players rejected it thinking it would be a precursor to a salary cap.
i would like to see a salary cap with some kind of modified larry bird rule whereby teams could re-sign their own free agents without too much of a penalty. the cap would be a little different every couple of years based on inflation and independent reviews of revenues/expenses.
as for a salary floor, i think it should be based on a two year average. lets say the floor is 40 million and a particular team is at 42 million but has a 6 million player that they want to trade. lets just assume that they are taking on minimal payroll and that trade makes good baseball sense. the salary floor would prevent the team from making this trade. but if the floor were based on a two year average a team could have 36 million payroll one year but must have 44 million payroll the next year.
as for the punishment for not meeting the floor i say you hold back whatever the difference between actual and the floor from revenue sharing. so if the floor is 40 million and they have a 36 million payroll then they get 4 million less from revenue sharing.