Thank you very much! It's so very obvious once you say it!
To my surprise, that environment variable is available both before and after setlocal in the called.bat file.
::Caller.bat
::using environment variable
set caller=%~n0
call called.bat %parm1% %parm2% %parm3%
goto :eof
::Called.bat
::using environment variable
echo %%caller%% before setlocal contains %caller%
setlocal
echo %%caller%% after setlocal contains %caller%
echo Parameters are %1 %2 %3
echo Called.bat was called by %caller%
...
endlocal
goto :eof