By using only the root key in the restore process does that in itself prove the balance is zero?
The chaincode is an integral part of how the addresses are generated, you cant skip it.
You mention recreating the chain code from 2 consecutive private keys, but I thought that it was random in the old style wallet.
The chaincode is unique and static for the lifetime of a wallet. 1.35c derives the chaincode from the root key, older versions pull 32 random bytes and use that instead. The chaincode is then used to generate key pairs on the chain.
Im not gonna delve in the math but basically to get the privkey N+1, you multiply privkey N by the chaincode. You do the same operation with the public keys. EC maths makes it so that pubkey N will match privkey N, even if you generated pubkey N without ever having knowledge of any private key (that's how we can have deterministic watching only wallets).
You cannot divide public keys because that operation does not exist in EC math, so you can't reveal the chaincode by looking at pubkey N and N+1. You can however do that with 2 consecutive private keys, since they are only scalars:
priv[N] * chaincode = priv[N+1]
<=>
chaincode = priv[N+1] / priv[N]
You say there is some way to recreate the chain code?
Unless you have private keys, no. The chaincode for your wallet is a random number, it has no relation to your rootkey, you're going to have to remember it or find an old wallet file with some private keys in it.