Oh, I see now. All required arguments must be before optional argument if you don't have a definitive way to differentiate between the two types. But if you do have a way to definitively differentiate between them, you would just have a single argument anyways.
I know that some plugins look for "@team" in a player name argument to apply an action to a whole team. However, this relies on a player never having that string in their name and you, as the executer of the function, not trying to apply it to a player using that string.