Don't know why it says 'local variable' instead of argument or parameter. Arguments are just local variables that are bound upon entry but it should state the difference. I guess it just has a limited vocabulary?
Anyway. The interpreter have no way of knowing that method will be given as a function. It sees that it is being used as a function and finds it suspicious.
It runs because it works. When you set a breakpoint and trace the stack you will see a call like (#<SUBR @020333e8 vla-GetCanonicalMediaNames> #<VLA-OBJECT IAcadLayout 01af0704>), which is legal.
However, if you were to compile the routine with linking on it would not be able to link to what it sees as a function (added: it is not defined anywhere as a function and therefore can't pass an address to the compiler):
; warning: cannot LINK METHOD
; The function is undefined
To get past such problems, you should evaluate it with EVAL:
(eval (list method obj))