Я не думаю, что это возможно. Как бы компилятор / препроцессор узнал, являются ли второй и третий аргументы частью аргументов переменной или переопределяют значения по умолчанию?
Вот почему параметры со значениями по умолчанию должны быть в последней позиции в функции.
Боюсь, вам понадобится два или три макроса, если вы сможете указать arg2 и использовать значение по умолчанию arg3, но это подвержено ошибкам.
#define MACRO(arg1, ...) func(arg1, "", "", ##__VA_ARGS__)
#define MACRO2(arg1, arg2, ...) func(arg1, arg2, "", ##__VA_ARGS__)
#define MACRO3(arg1, arg2, arg3, ...) func(arg1, arg2, arg3, ##__VA_ARGS__)