Yes it is possible and it is quite easy to do. I use it a lot in my projects so users don't need special templates or block collections and still have a good look and feel.
What to do? Collect your blocks you want to use. Keep in mind to save them in the lowest dwg format as the AutoCAD version your application runs in. If you have more blocks to share, put them in one dwg file (i.e. with the name YourAppCollection.dwg). Add that file to your resources.
Then you can run the following code to insert the file into the current drawing.
Sub AddDefaultBlocks()
Dim doc As acAppServ.Document = acAppServ.Application.DocumentManager.MdiActiveDocument
Dim db As Database = doc.Database
Dim sTempLocation As String = My.Computer.FileSystem.SpecialDirectories.Temp & "\"
Dim tr As Transaction = db.TransactionManager.StartTransaction()
Using tr
If Not CurrentAvailableBlocks.Contains("MyAppBlocksCollection") Then
Dim sLocation As String = sTempLocation & "MyAppBlocksCollection.dwg"
My.Computer.FileSystem.WriteAllBytes(sLocation, My.Resources.MyAppBlocksCollection, False)
If IO.File.Exists(sLocation) = False Then Return
Using destdb As Database = New Database(False, True)
destdb.ReadDwgFile(sLocation, IO.FileShare.Read, True, "")
Dim btrID As ObjectId = db.Insert("MyAppBlocksCollection", destdb, False)
End Using
End If
tr.Commit()
End Using
End Sub
Assuming you collected a list of available blocks in a list called CurrentAvailableBlocks, to check if the block definition already exist.
After inserting your block or your block collection you are able to use the blocks that are imported. Also your users can prepare their template with these blocks in their own style. If the blocks exist then your application uses their blocks, else yours.