You don't need to go through the complicated method you went through to get the new record. The following works just as well:
Id objId = 'a0Ci000000vd7xA';
SObject record = objId.getSObjectType().newSObject(objId);
This approach also has the advantage that it also works even if someone does something silly like creating a class called "Account" and you try to instantiate an Account record.
If you want to use the static methods, you have to first cast to a concrete type:
CustomObject__c record = (CustomObject__c)objId.getSObjectType().newSObject(objId);
However, if you want to use the object generically, you use the get/put SObject methods:
record.put('Name','New Name Value');