Build a House using code and prefabs via scripting

Hey guys, currently trying to devise a script to take user input in terms of length, breadth, height and width of walls and create a house using this. Right now the walls and floor work and give me the desired result however there is a crucial change I must make within the buildExterior method ; Right now the system instantiates 1 wall prefab and manipulated this using scale to provide the desired effect, this creates problems with meshes being stretched etc. Ideally, I would like this to simply spawn a repeated version of the wall prefab… ie a wall of user specified length “40” and breadth “30” should spawn 40 of the 1x1 wall prefabs side by side for length and 30 of them for breadth. Any help adjusting would be appreciated.

public void buildExterior() //Execute on submit button clicked
     {
         setLength();
         setBreadth();
         setHeight();
         setWidth();
         Debug.Log("Length" + length);
         Debug.Log("Breadth" + breadth);
         Debug.Log("Height" + height);
         Debug.Log("Width" + width);
         //Floor
         GameObject floorGo = Instantiate(floorPrefab);
         floorGo.transform.parent = transform;
         Vector3 flooradjustedPosition = floorStartPosition;
         floorGo.transform.Rotate(90, 0, 0);
         //Walls
         for (int i = -2; i < 2; i++)
         {
             GameObject go = Instantiate(wallPrefab);
             go.transform.parent = transform;
             Vector3 scale = Vector3.one;
             Vector3 walladjustedPosition = wallsStartPosition;
             float sign = Mathf.Sign(i);
             if ((i * sign) % 2 == 0)
             {
                 //Breadth Walls
                 walladjustedPosition.x += (length * sign) / 2;
                 scale.x *= breadth + 1;
                 scale.y = height;
                 scale.z *= breadth + width;
                 go.transform.Rotate(0, 90, 0);
             }
             else
             {
                 //Length Walls
                 walladjustedPosition.z += (breadth * sign) / 2;
                 scale.x *= length;
                 scale.y = height;
                 scale.z *= breadth + width;
             }
             walladjustedPosition.y += height / 2;
             go.transform.localScale = scale;
             go.transform.localPosition = walladjustedPosition;
             walls.Add(go);
             //Flooring Scale
             scale.x = length;
             scale.y = height / 2;
             scale.z = breadth;
             floorGo.transform.localScale = scale;
             floorGo.transform.localPosition = flooradjustedPosition;
             flooring.Add(floorGo);
         }
     }

There are fazillions of ways to approach this, ranging from re-UV-mapping after the stretch to get the textures back reasonable, to even rescaling the root objects and their interior meshes. My MakeGeo project has some example code to drive the UVs back to world scale, located in this file:

The full MakeGeo project is there, and also presently hosted at these locations:

https://bitbucket.org/kurtdekker/makegeo