About two years ago I mentioned the idea of this where either the franchise player didn't count or the league set an amount of contract for that player league wide and anything a team played above that would count against the cap.
Example: league sets franchise player amount of $9MM for a given season and the Rangers pay that play $10MM. That player would cost $1MM against the cap. If the following season the franchise player amount went to $10MM and that player was still designated as the franchise player, there would be no cap hit.
There would have to be other protections for that player. Like that player would automatically have a sort of NMC/NTC where a team cannot trade them until the offseason. Also not have those players salaries count towards escrow.