Your joins all depend on
A.name
, which will be
null
if the job doesn't exist on server A.
Try something like this:
SELECT A.name, B.name, C.name, D.name
FROM A.msdb.dbo.sysjobs A
FULL JOIN B.msdb.dbo.sysjobs B ON B.name = A.name
FULL JOIN C.msdb.dbo.sysjobs C ON C.name = Coalesce(A.name, B.name)
FULL JOIN D.msdb.dbo.sysjobs D ON D.name = Coalesce(A.name, B.name, C.name)