Here is a way to implement the entity and light with scaling disabled for the light.
[pascal]type
TVector3 = record
x, y, z: Single;
end;

TEntity = class
protected
FPos: TVector3;
FRotAxis: TVector3;
FScale: TVector3;
FAngle: Single;
FID: Integer;
protected
procedure SetPos(const p: TVector3); virtual;
procedure SetRotAxis(const a: TVector3); virtual;
procedure SetAngle(a: Single); virtual;
procedure SetScale(const s: TVector3); virtual;
public
constructor Create(AID: Integer); virtual;
procedure Apply; virtual;
property Pos: TVector3 read FPos write SetPos;
property RotAxis: TVector3 read FRotAxis write SetRotAxis;
property Angle: Single read FAngle write SetAngle;
property Scale: TVector3 read FScale write SetScale;
property ID: Integer read FID;
end;

TLight = class(TEntity)
protected
procedure SetScale(const s: TVector3); override;
public
procedure Apply; override;
end;

function Vector3(x, y, z: Single): TVector3;

implementation

function Vector3(x, y, z: Single): TVector3;
begin
Result.x := x;
Result.y := y;
Result.z := z;
end;

{ TEntity }

constructor TEntity.Create(AID: Integer);
begin
FID := AID;
FPos := Vector3(0.0, 0.0, 0.0);
FRotAxis := Vector3(1.0, 0.0, 0.0);
FScale := Vector3(1.0, 1.0, 1.0);
FAngle := 0.0;
end;

procedure TEntity.Apply;
begin
glRotatef(FAngle, FRotAxis.x, FRotAxis.y, FRotAxis.z);
glScalef(FScale.x, FScale.y, FScale.z);
glTranslatef(Fpos.x, FPos.y, FPos.z);
end;

procedure TEntity.SetPos(const p: TVector3);
begin
FPos := p;
end;

procedure TEntity.SetRotAxis(const a: TVector3);
begin
FRotAxis := a;
end;

procedure TEntity.SetAngle(a: Single);
begin
FAngle := angle;
end;

procedure TEntity.SetScale(const s: TVector3);
begin
FScale := s;
end;

{ TLight }

procedure TLight.SetScale(const s: TVector3);
begin
{ Do nothing. Do not call inherited. }
end;

procedure TLight.Apply;
begin
{ Call the inherited Apply to set the pos, rot, etc. }
inherited;
{ Set the light's properties here, ie. colour, range, etc. }
{ ... }
end;[/pascal]

I hope that helps.