Matrix Instantiation question

When I run this script, it instantiates a corner object at all of the corners. But it makes 4 of them (at each corner) instead of just one. What should I do?

var object : GameObject;
var newVertices : Vector3[];
var newUV : Vector2[];
var newTriangles : int[];
var objects : Transform[];
var corner : GameObject;

var myVerts : Vector3[];

function Start (){
    var thisMatrix = transform.localToWorldMatrix;
    var vertices = GetComponent.<MeshFilter>().mesh.vertices;
    for (vertex in vertices) {
        print("mesh1 vertex at " + thisMatrix.MultiplyPoint3x4(vertex) );
		var newVert = Instantiate(corner, thisMatrix.MultiplyPoint3x4(vertex), Quaternion.identity);

    }
}

A way to solve the problem is to only add an object to each vertex position (simply by testing if the you already instantiated the object at that position):

var object : GameObject;
var newVertices : Vector3[];
var newUV : Vector2[];
var newTriangles : int[];
var objects : Transform[];
var corner : GameObject;

var myVerts : Vector3[];

function Start (){
    var thisMatrix = transform.localToWorldMatrix;
    var vertices = GetComponent.<MeshFilter>().mesh.vertices;
    var vset : List = new List();
    for (vertex in vertices) {
    	if (vset.Contains(vertex))
    		continue;
    	vset.Add(vertex);
        print("mesh1 vertex at " + thisMatrix.MultiplyPoint3x4(vertex) );
        var newVert = Instantiate(corner, thisMatrix.MultiplyPoint3x4(vertex), Quaternion.identity);

    }
}

For a deeper understanding of how Mesh objects are constructed in Unity, I suggest you read this blog about the topic:
http://blog.nobel-joergensen.com/2010/12/25/procedural-generated-mesh-in-unity/

That’s because there are 4 vertices at each corner (necessary because of normals). You could use the bounds instead, or if you still want to use vertices, make a cube and import it with calculate normals at 180° smoothing angle, so the vertices aren’t split.