I think he probably wants to use the AIs as parked cars for cruise servers, or just dummy cars. (?)

Your timing is perfect, I'm writing that multiple races feature and am annoyed with the way I currently deal with custom checkpoints (see attachment: slab wall objects to simulate checkpoint, colour byte to detect what kind of checkpoint it is). 
struct IS_UCO // User Control Object
{
byte Size; // 28
byte Type; // ISP_UCO
byte ReqI; // 0
byte PLID; // player's unique id
byte UCOFlags;
byte Sp1;
byte Sp2;
byte Sp3;
unsigned Time; // hundredths of a second since start (as in SMALL_RTP)
CarContOBJ C;
/*
byte Direction; // car's motion if Speed > 0 : 0 = world y direction, 128 = 180 deg
byte Heading; // direction of forward axis : 0 = world y direction, 128 = 180 deg
byte Speed; // m/s
byte Sp3;
short X; // position (1 metre = 16)
short Y; // position (1 metre = 16)
*/
ObjectInfo Info; // Index 252 : InSim checkpoint / Index 253 : InSim circle
/*
short X;
short Y;
byte Zbyte;
byte Flags;
byte Index;
byte Heading;
*/
}
// UCOFlags byte
#define UCO_WRONG_WAY 1 // set when going through a checkpoint in the wrong direction
#define UCO_DEPART 2 // not set when entering a circle - set when leaving a circle