Don't destroy player after disconnecting or calling ClientScene.RemovePlayer()

I have the following scenario:
In my game there are 4 players, one of them is controlled by the host the other 3 are controlled by the AI, located on the server.
When another client connects, one of the AI controlled players will then be controlled by the new client.
This works so far using the following code:

public override void OnServerAddPlayer(NetworkConnection conn, short playerControllerId)
{
    //base.OnServerAddPlayer(conn, playerControllerId);
    for (int i = 0; i < 4; i++)
    {
        if (allPlayers*.clientAuthorityOwner == null)*
 *{*
 _NetworkIdentity player = allPlayers*;*_
 _*NetworkServer.AddPlayerForConnection(conn, player.gameObject, playerControllerId);*_
 _*player.AssignClientAuthority(conn);*_
 _*return;*_
 _*}*_
 _*}*_
_*}*_
_*```*_
_*However the problem appears when the client disconnects again or ClientScene.RemovePlayer() is called. Since his player has client authority the player will be destroyed. However, this is not what I want. Instead the AI should take over the player again in order to keep exactly 4 players.*_
_*Overriding NetworkManager.OnServerDisconnect() prevents desotroying the player when the client disconnects, but not if ClientScene.RemovePlayer() is called on the client:*_
_*```*_
_*public override void OnServerDisconnect(NetworkConnection conn)*_
_*{*_
 _*//base.OnServerDisconnect(conn);*_
_*}*_
_*```*_
_*I have already found this in the documentation but I have no clue how to disable it:*_
_*http://docs.unity3d.com/ScriptReference/Networking.NetworkServer.DestroyPlayersForConnection.html*_

I have found a working solution by overriding the NetworkManager.OnServerRemovePlayer() Method:

public override void OnServerRemovePlayer(NetworkConnection conn, PlayerController player)
{
    GameObject newPlayer = Instantiate(playerPrefab);
    NetworkServer.Spawn(newPlayer);
    for (int i = 0; i < 4; i++)
    {
        if(allPlayers *== player.unetView)*
 *{*
 _allPlayers *= newPlayer.GetComponent<NetworkIdentity>();*_
 _*break;*_
 _*}*_
 _*}*_
 _*base.OnServerRemovePlayer(conn, player);*_
_*}*_
_*```*_
_*However, I do not really like this approach since the player has to be destroyed and recreated instead of just changing some authority stuff (or whatever). Therefore I will not mark this as the correct answer.*_
_*I hope someone knows a better approach.*_