I have three clients that train together and have purchased a 12-session package where the total cost is split in three. If any of them misses with no advance notice she is charged that session. But if she let me know with enough time in advance then she is fine. In order to keep the package intact for all of them and basically make it easier to keep track of I have agreed with them that when this happens, they other two (pay for the session at my partner session rate) or if two miss the one that shows up pays for an individual session. So they all have the same amount of sessions to train together. One of them felt that this was a punishment in a way. It is really not, because she is getting her one on one training and she is paying for what she is getting that day. But I wonder if there is a better way.
partner / small group training is always tricky for that very reason. Personally, I believe that you have found an excellent solution. I also like it that you have clearly communicated your policy to the three participants.
It sounds to me that the one person complaining is the one who usually does not cancel. Her problem is not so much with you than with the other two. I was wondering, though, whether she knows in advance that she will be the only one training when she comes in or whether she discovers it right there and then. You may suggest to all participants to communicate better among themselves so that they have prior warning. But I would put that responsibility on them and would not take it on myself.
Hope this helps.