There are no intrinsic problems with designing your default to be an immutable empty tuple. However, it could be considered an non-intuitive design approach. Any references to specific locations in the tuple would cause an exception to be raised. If you are careful enough with creating argument checks then this will not be a problem, but if you build the rest of your code to expect data from specific locations and don't verify the tuple is empty then this will cause errors.
It depends on what your goal is for the argument. An empty list would have more obvious applications for a default argument (at least those that modify the list in some way), but an empty immutable tuple would not have any intuitive uses as a default besides indicating that no argument was given.
The typical approach for default arguments would be to set them to None which makes it perfectly clear when the arguments have not been set:
def foo(a, b=None):
forloop?foowithout arguments, asfoo(). But if you know the function only does anything if the iterable is nonempty, why would you ever write that?forloop, which means your answer "No" to my question should really have been "Yes, my function does do things other than the for loop"..