I spent quite some time with this and managed to solve it, so I thought I share my findings.
If he has already been killed by the shadows, don't approach or kill them. Instead, grab his location from the projector he left in the inn. Then position yourself just outside the ring and use the script extender console or similar to give the following commands:
Osi.DB_Dead:Delete("b6a3a9e9-b6eb-4c19-ab3f-4c431178fe1b")
Osi.DB_PermaDefeated:Delete("b6a3a9e9-b6eb-4c19-ab3f-4c431178fe1b")
Osi.Resurrect("b6a3a9e9-b6eb-4c19-ab3f-4c431178fe1b")
Osi.TeleportTo("b6a3a9e9-b6eb-4c19-ab3f-4c431178fe1b", GetHostCharacter())
He probably needs to be properly dead for this, although never tried with him as a zombie. Now he should spawn healthy and head for the shadows. Just escort him and kill them. That should trigger the conversation and make him return to the inn.
If the shadows are already dead, I'm not sure if this will work, but you will probably at least have to set the appropriate flags:
Osi.SetFlag("ad212abc-6ab6-9923-6c3f-ebae3d7ba8a7")
Osi.SetFlag("a00234f3-699d-7055-dd19-a8814f9d5d4d")
Additionally, when going through the game files, I noticed some flags that sounded relevant. Not sure if they are necessary. Probably related to other acts, but I cleared them just in case and it seemed to work:
Osi.ClearFlag("47b8a371-e4a9-40e6-bc0f-18ac582142b9")
Osi.DB_GlobalFlag:Delete("GLO_Prodigy_State_Defeated_54df9b47-fe34-3cbc-1a52-e539924c6613")
Osi.DB_GlobalFlag:Delete("GLO_Prodigy_State_PermaDefeated_d9ddfe5f-6658-4c63-bacc-bbcd50940c21")
Osi.DB_GlobalFlag:Delete("GLO_Prodigy_Knows_Dead_908e8264-f675-c137-aaa0-c31b5eeac3b1")
I hope this helps at least someone. Took me two days to figure this out =)
BR,
Jandof