Hi Dan,
PS> (ps '(1 [])) "[1, '[]'];"
That is indeed weird. I fixed it by treading [] as a special case (like a single-quoted nil). The patch is in the repository.
PS> (ps '(1 ())) "[1, null];"
Now this is not weird, because the base case here is '(()) aka '(nil). This is the unfortunate side effect of CL treating () and nil equivalently and Parenscript treating () and [] equivalently. There's no way to tell from the context which is the "right" way to compile '(()). I think it is more consistent to have '(()) compile to [null] rather than [[]], but I am open to hearing other options.
Vladimir