For that usecase you could make the existing function a wrapper for a new function.
I am using C-syntax here just to demonstrate what I mean:
void existingFunction(int arg1, int arg2)
{
// Here used to be the old code - remove it and replace it with this call
newFunction(arg1, arg2, DEFAULT_VALUE_FOR_ARG3);
}
void newFunction(int arg1, int arg2, int arg3)
{
// insert the source code of your existing function here and
// add handling for arg3
}
That way you can keep existing calls and call the new function wherever you need the optional argument.