Ok, got a good work around, it doesn't output to a table but i'm sure you can log it somewhere
effectively you do this
BEGIN TRY
EXEC ('CALL sp_test;') AT LINKSVR;
END TRY
BEGIN CATCH
RAISERROR(N'Error called on Linked Server',16,1)
END CATCH
RAISERROR
will output the custom error and the message returned from the Linked Server, however the message from the link server still can't be stored in a table but with the SQL Server Agent Job Activity Monitor the job will still fail at the step this occurs and in the step details all the data is outputted