Нормально ли в PHP определять переменную при вызове функции в списке аргументов?
Нет ненормально, но в крайних случаях это применяется.
В данном случае это способ вернуть два разных значения из функции.

Но по возможности такого подхода следует избегать.

И чисто технически это не определение переменной при вызове, а передача переменной по ссылке.
В данном случае определять переменную $matches не нужно. Если вы посмотрите на документацию к функции preg_match (https://www.php.net/manual/ru/function.preg-match.php) то увидите валидный пример кода:

<?php
preg_match('/(foo)(bar)(baz)/', 'foobarbaz', $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
?>

Эта переменная возникает из использования данной функции и пытаться определять её заранее не нужно. Если, конечно, этого не требуют особенности вашей программы.