The return address is an ASM label. The value that you push for "push return-address" in the call pseudocode is the ROM address of the label.
// call fn 1
@RA$3
D=A
// code to do "push D"
// remaining "call" code, ends with ...
@fn
0;JMP
(RA$3)
The "goto RET" in the return pseudocode is
// return
// frame and return value code...
@R15 // or R13 or R14, whatever you used for "RET"
A=M
0;JMP
The number in the return address labels does not need to be the VM command number, it just needs to be unique for each instance of a call command, the same way the labels used in "gt", "lt" and "eq" need to be unique for each instance.
--Mark